#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include <string>
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>
#include "Structures.h"

#define BUFFER_OFFSET(x) ((char*)NULL+(x))

namespace CG {
char *textFileRead(const char *fn);
float *normalize(float v[3]);
vec3 normalize(vec3 v);
float *cross(float vec1[3], float vec2[3], float result[3]);
vec3 cross(vec3 v1, vec3 v2);
float dot(vec3 v1, vec3 v2);
float normDot(vec3 v1, vec3 v2);
vec3 add(vec3 v1, vec3 v2);
vec3 mult(vec3 v, float m);
std::string numberToString(int num);
std::string numberToString(float num, int precision);
GLuint loadTexture(std::string filename);
void setTextureUnit(GLuint shaderProg, std::string name, GLuint unit);
void bindTexture(GLuint texID, GLenum activeTexture);
GLuint loadShaderSource(std::string filename, GLuint shaderType);
GLuint setupShader(std::string vertFilename, std::string fragFilename);
GLfloat euclidDistance(vec3 p1, vec3 p2);
vec3 rotateVector(vec3 v1, vec3 v2, float angle);
}

#endif // FUNCTIONS_H
